/*
CryptoJS v3.0.2
code.google.com/p/crypto-js
(c) 2009-2012 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
 */
var CryptoJS = CryptoJS || function (n, l) {
    var i = {},
    j = i.lib = {},
    k = j.Base = function () {
        function b() {}
        return {
            extend: function (p) {
                b.prototype = this;
                var a = new b;
                p && a.mixIn(p);
                a.$super = this;
                return a
            },
            create: function () {
                var b = this.extend();
                b.init.apply(b, arguments);
                return b
            },
            init: function () {},
            mixIn: function (b) {
                for (var a in b)
                    b.hasOwnProperty(a) && (this[a] = b[a]);
                b.hasOwnProperty("toString") && (this.toString = b.toString)
            },
            clone: function () {
                return this.$super.extend(this)
            }
        }
    }
    (),
    e = j.WordArray = k.extend({
        init: function (b, a) {
            b =
                this.words = b || [];
            this.sigBytes = a != l ? a : 4 * b.length
        },
        toString: function (b) {
            return (b || c).stringify(this)
        },
        concat: function (b) {
            var a = this.words,
            c = b.words,
            g = this.sigBytes,
            b = b.sigBytes;
            this.clamp();
            if (g % 4)
                for (var h = 0; h < b; h++)
                    a[g + h >>> 2] |= (c[h >>> 2] >>> 24 - 8 * (h % 4) & 255) << 24 - 8 * ((g + h) % 4);
            else if (65535 < c.length)
                for (h = 0; h < b; h += 4)
                    a[g + h >>> 2] = c[h >>> 2];
            else
                a.push.apply(a, c);
            this.sigBytes += b;
            return this
        },
        clamp: function () {
            var b = this.words,
            a = this.sigBytes;
            b[a >>> 2] &= 4294967295 << 32 - 8 * (a % 4);
            b.length = n.ceil(a / 4)
        },
        clone: function () {
            var b =
                k.clone.call(this);
            b.words = this.words.slice(0);
            return b
        },
        random: function (b) {
            for (var a = [], c = 0; c < b; c += 4)
                a.push(4294967296 * n.random() | 0);
            return e.create(a, b)
        }
    }),
    d = i.enc = {},
    c = d.Hex = {
        stringify: function (b) {
            for (var a = b.words, b = b.sigBytes, c = [], g = 0; g < b; g++) {
                var h = a[g >>> 2] >>> 24 - 8 * (g % 4) & 255;
                c.push((h >>> 4).toString(16));
                c.push((h & 15).toString(16))
            }
            return c.join("")
        },
        parse: function (b) {
            for (var a = b.length, c = [], g = 0; g < a; g += 2)
                c[g >>> 3] |= parseInt(b.substr(g, 2), 16) << 24 - 4 * (g % 8);
            return e.create(c, a / 2)
        }
    },
    a = d.Latin1 = {
        stringify: function (b) {
            for (var a =
                    b.words, b = b.sigBytes, c = [], g = 0; g < b; g++)
                c.push(String.fromCharCode(a[g >>> 2] >>> 24 - 8 * (g % 4) & 255));
            return c.join("")
        },
        parse: function (b) {
            for (var a = b.length, c = [], g = 0; g < a; g++)
                c[g >>> 2] |= (b.charCodeAt(g) & 255) << 24 - 8 * (g % 4);
            return e.create(c, a)
        }
    },
    f = d.Utf8 = {
        stringify: function (b) {
            try {
                return decodeURIComponent(escape(a.stringify(b)))
            } catch (c) {
                throw Error("Malformed UTF-8 data");
            }
        },
        parse: function (b) {
            return a.parse(unescape(encodeURIComponent(b)))
        }
    },
    o = j.BufferedBlockAlgorithm = k.extend({
        reset: function () {
            this._data = e.create();
            this._nDataBytes = 0
        },
        _append: function (b) {
            "string" == typeof b && (b = f.parse(b));
            this._data.concat(b);
            this._nDataBytes += b.sigBytes
        },
        _process: function (b) {
            var a = this._data,
            c = a.words,
            g = a.sigBytes,
            h = this.blockSize,
            m = g / (4 * h),
            m = b ? n.ceil(m) : n.max((m | 0) - this._minBufferSize, 0),
            b = m * h,
            g = n.min(4 * b, g);
            if (b) {
                for (var o = 0; o < b; o += h)
                    this._doProcessBlock(c, o);
                o = c.splice(0, b);
                a.sigBytes -= g
            }
            return e.create(o, g)
        },
        clone: function () {
            var b = k.clone.call(this);
            b._data = this._data.clone();
            return b
        },
        _minBufferSize: 0
    });
    j.Hasher = o.extend({
        init: function () {
            this.reset()
        },
        reset: function () {
            o.reset.call(this);
            this._doReset()
        },
        update: function (b) {
            this._append(b);
            this._process();
            return this
        },
        finalize: function (b) {
            b && this._append(b);
            this._doFinalize();
            return this._hash
        },
        clone: function () {
            var b = o.clone.call(this);
            b._hash = this._hash.clone();
            return b
        },
        blockSize: 16,
        _createHelper: function (b) {
            return function (a, c) {
                return b.create(c).finalize(a)
            }
        },
        _createHmacHelper: function (b) {
            return function (a, c) {
                return q.HMAC.create(b, c).finalize(a)
            }
        }
    });
    var q = i.algo = {};
    return i
}
(Math);
(function () {
    var n = CryptoJS,
    l = n.lib.WordArray;
    n.enc.Base64 = {
        stringify: function (i) {
            var j = i.words,
            k = i.sigBytes,
            e = this._map;
            i.clamp();
            for (var i = [], d = 0; d < k; d += 3)
                for (var c = (j[d >>> 2] >>> 24 - 8 * (d % 4) & 255) << 16 | (j[d + 1 >>> 2] >>> 24 - 8 * ((d + 1) % 4) & 255) << 8 | j[d + 2 >>> 2] >>> 24 - 8 * ((d + 2) % 4) & 255, a = 0; 4 > a && d + 0.75 * a < k; a++)
                    i.push(e.charAt(c >>> 6 * (3 - a) & 63));
            if (j = e.charAt(64))
                for (; i.length % 4; )
                    i.push(j);
            return i.join("")
        },
        parse: function (i) {
            var i = i.replace(/\s/g, ""),
            j = i.length,
            k = this._map,
            e = k.charAt(64);
            e && (e = i.indexOf(e), -1 != e && (j = e));
            for (var e = [], d = 0, c = 0; c < j; c++)
                if (c % 4) {
                    var a = k.indexOf(i.charAt(c - 1)) << 2 * (c % 4),
                    f = k.indexOf(i.charAt(c)) >>> 6 - 2 * (c % 4);
                    e[d >>> 2] |= (a | f) << 24 - 8 * (d % 4);
                    d++
                }
            return l.create(e, d)
        },
        _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
    }
})();
(function (n) {
    function l(a, c, b, d, f, g, h) {
        a = a + (c & b | ~c & d) + f + h;
        return (a << g | a >>> 32 - g) + c
    }
    function i(a, c, b, d, f, g, h) {
        a = a + (c & d | b & ~d) + f + h;
        return (a << g | a >>> 32 - g) + c
    }
    function j(a, c, b, d, f, g, h) {
        a = a + (c ^ b ^ d) + f + h;
        return (a << g | a >>> 32 - g) + c
    }
    function k(a, c, b, d, f, g, h) {
        a = a + (b ^ (c | ~d)) + f + h;
        return (a << g | a >>> 32 - g) + c
    }
    var e = CryptoJS,
    d = e.lib,
    c = d.WordArray,
    d = d.Hasher,
    a = e.algo,
    f = [];
    (function () {
        for (var a = 0; 64 > a; a++)
            f[a] = 4294967296 * n.abs(n.sin(a + 1)) | 0
    })();
    a = a.MD5 = d.extend({
        _doReset: function () {
            this._hash = c.create([1732584193, 4023233417,
                        2562383102, 271733878])
        },
        _doProcessBlock: function (a, c) {
            for (var b = 0; 16 > b; b++) {
                var d = c + b,
                e = a[d];
                a[d] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360
            }
            for (var d = this._hash.words, e = d[0], g = d[1], h = d[2], m = d[3], b = 0; 64 > b; b += 4)
                16 > b ? (e = l(e, g, h, m, a[c + b], 7, f[b]), m = l(m, e, g, h, a[c + b + 1], 12, f[b + 1]), h = l(h, m, e, g, a[c + b + 2], 17, f[b + 2]), g = l(g, h, m, e, a[c + b + 3], 22, f[b + 3])) : 32 > b ? (e = i(e, g, h, m, a[c + (b + 1) % 16], 5, f[b]), m = i(m, e, g, h, a[c + (b + 6) % 16], 9, f[b + 1]), h = i(h, m, e, g, a[c + (b + 11) % 16], 14, f[b + 2]), g = i(g, h, m, e, a[c + b % 16], 20, f[b + 3])) : 48 > b ? (e =
                        j(e, g, h, m, a[c + (3 * b + 5) % 16], 4, f[b]), m = j(m, e, g, h, a[c + (3 * b + 8) % 16], 11, f[b + 1]), h = j(h, m, e, g, a[c + (3 * b + 11) % 16], 16, f[b + 2]), g = j(g, h, m, e, a[c + (3 * b + 14) % 16], 23, f[b + 3])) : (e = k(e, g, h, m, a[c + 3 * b % 16], 6, f[b]), m = k(m, e, g, h, a[c + (3 * b + 7) % 16], 10, f[b + 1]), h = k(h, m, e, g, a[c + (3 * b + 14) % 16], 15, f[b + 2]), g = k(g, h, m, e, a[c + (3 * b + 5) % 16], 21, f[b + 3]));
            d[0] = d[0] + e | 0;
            d[1] = d[1] + g | 0;
            d[2] = d[2] + h | 0;
            d[3] = d[3] + m | 0
        },
        _doFinalize: function () {
            var a = this._data,
            c = a.words,
            b = 8 * this._nDataBytes,
            d = 8 * a.sigBytes;
            c[d >>> 5] |= 128 << 24 - d % 32;
            c[(d + 64 >>> 9 << 4) + 14] = (b << 8 | b >>>
                24) & 16711935 | (b << 24 | b >>> 8) & 4278255360;
            a.sigBytes = 4 * (c.length + 1);
            this._process();
            a = this._hash.words;
            for (c = 0; 4 > c; c++)
                b = a[c], a[c] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360
        }
    });
    e.MD5 = d._createHelper(a);
    e.HmacMD5 = d._createHmacHelper(a)
})(Math);
(function () {
    var n = CryptoJS,
    l = n.lib,
    i = l.Base,
    j = l.WordArray,
    l = n.algo,
    k = l.EvpKDF = i.extend({
        cfg: i.extend({
            keySize: 4,
            hasher: l.MD5,
            iterations: 1
        }),
        init: function (e) {
            this.cfg = this.cfg.extend(e)
        },
        compute: function (e, d) {
            for (var c = this.cfg, a = c.hasher.create(), f = j.create(), i = f.words, k = c.keySize, c = c.iterations; i.length < k; ) {
                b && a.update(b);
                var b = a.update(e).finalize(d);
                a.reset();
                for (var l = 1; l < c; l++)
                    b = a.finalize(b), a.reset();
                f.concat(b)
            }
            f.sigBytes = 4 * k;
            return f
        }
    });
    n.EvpKDF = function (e, d, c) {
        return k.create(c).compute(e,
            d)
    }
})();
CryptoJS.lib.Cipher || function (n) {
    var l = CryptoJS,
    i = l.lib,
    j = i.Base,
    k = i.WordArray,
    e = i.BufferedBlockAlgorithm,
    d = l.enc.Base64,
    c = l.algo.EvpKDF,
    a = i.Cipher = e.extend({
        cfg: j.extend(),
        createEncryptor: function (a, b) {
            return this.create(this._ENC_XFORM_MODE, a, b)
        },
        createDecryptor: function (a, b) {
            return this.create(this._DEC_XFORM_MODE, a, b)
        },
        init: function (a, b, c) {
            this.cfg = this.cfg.extend(c);
            this._xformMode = a;
            this._key = b;
            this.reset()
        },
        reset: function () {
            e.reset.call(this);
            this._doReset()
        },
        process: function (a) {
            this._append(a);
            return this._process()
        },
        finalize: function (a) {
            a && this._append(a);
            return this._doFinalize()
        },
        keySize: 4,
        ivSize: 4,
        _ENC_XFORM_MODE: 1,
        _DEC_XFORM_MODE: 2,
        _createHelper: function () {
            return function (a) {
                return {
                    encrypt: function (b, c, d) {
                        return ("string" == typeof c ? r : p).encrypt(a, b, c, d)
                    },
                    decrypt: function (b, c, d) {
                        return ("string" == typeof c ? r : p).decrypt(a, b, c, d)
                    }
                }
            }
        }
        ()
    });
    i.StreamCipher = a.extend({
        _doFinalize: function () {
            return this._process(!0)
        },
        blockSize: 1
    });
    var f = l.mode = {},
    o = i.BlockCipherMode = j.extend({
        createEncryptor: function (a, b) {
            return this.Encryptor.create(a,
                b)
        },
        createDecryptor: function (a, b) {
            return this.Decryptor.create(a, b)
        },
        init: function (a, b) {
            this._cipher = a;
            this._iv = b
        }
    }),
    f = f.CBC = function () {
        function a(b, c, g) {
            var d = this._iv;
            d ? this._iv = n : d = this._prevBlock;
            for (var h = 0; h < g; h++)
                b[c + h] ^= d[h]
        }
        var b = o.extend();
        b.Encryptor = b.extend({
            processBlock: function (b, c) {
                var d = this._cipher,
                h = d.blockSize;
                a.call(this, b, c, h);
                d.encryptBlock(b, c);
                this._prevBlock = b.slice(c, c + h)
            }
        });
        b.Decryptor = b.extend({
            processBlock: function (b, c) {
                var d = this._cipher,
                h = d.blockSize,
                f = b.slice(c, c +
                        h);
                d.decryptBlock(b, c);
                a.call(this, b, c, h);
                this._prevBlock = f
            }
        });
        return b
    }
    (),
    q = (l.pad = {}).Pkcs7 = {
        pad: function (a, b) {
            for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, f = [], e = 0; e < c; e += 4)
                f.push(d);
            c = k.create(f, c);
            a.concat(c)
        },
        unpad: function (a) {
            a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
        }
    };
    i.BlockCipher = a.extend({
        cfg: a.cfg.extend({
            mode: f,
            padding: q
        }),
        reset: function () {
            a.reset.call(this);
            var b = this.cfg,
            c = b.iv,
            b = b.mode;
            if (this._xformMode == this._ENC_XFORM_MODE)
                var d = b.createEncryptor;
            else
                d = b.createDecryptor,
                this._minBufferSize = 1;
            this._mode = d.call(b, this, c && c.words)
        },
        _doProcessBlock: function (a, b) {
            this._mode.processBlock(a, b)
        },
        _doFinalize: function () {
            var a = this.cfg.padding;
            if (this._xformMode == this._ENC_XFORM_MODE) {
                a.pad(this._data, this.blockSize);
                var b = this._process(!0)
            } else
                b = this._process(!0), a.unpad(b);
            return b
        },
        blockSize: 4
    });
    var b = i.CipherParams = j.extend({
        init: function (a) {
            this.mixIn(a)
        },
        toString: function (a) {
            return (a || this.formatter).stringify(this)
        }
    }),
    f = (l.format = {}).OpenSSL = {
        stringify: function (a) {
            var b =
                a.ciphertext,
            a = a.salt,
            b = (a ? k.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(d);
            return b = b.replace(/(.{64})/g, "$1\n")
        },
        parse: function (a) {
            var a = d.parse(a),
            c = a.words;
            if (1398893684 == c[0] && 1701076831 == c[1]) {
                var f = k.create(c.slice(2, 4));
                c.splice(0, 4);
                a.sigBytes -= 16
            }
            return b.create({
                ciphertext: a,
                salt: f
            })
        }
    },
    p = i.SerializableCipher = j.extend({
        cfg: j.extend({
            format: f
        }),
        encrypt: function (a, c, d, f) {
            var f = this.cfg.extend(f),
            e = a.createEncryptor(d, f),
            c = e.finalize(c),
            e = e.cfg;
            return b.create({
                ciphertext: c,
                key: d,
                iv: e.iv,
                algorithm: a,
                mode: e.mode,
                padding: e.padding,
                blockSize: a.blockSize,
                formatter: f.format
            })
        },
        decrypt: function (a, b, c, d) {
            d = this.cfg.extend(d);
            b = this._parse(b, d.format);
            return a.createDecryptor(c, d).finalize(b.ciphertext)
        },
        _parse: function (a, b) {
            return "string" == typeof a ? b.parse(a) : a
        }
    }),
    l = (l.kdf = {}).OpenSSL = {
        compute: function (a, d, f, e) {
            e || (e = k.random(8));
            a = c.create({
                keySize: d + f
            }).compute(a, e);
            f = k.create(a.words.slice(d), 4 * f);
            a.sigBytes = 4 * d;
            return b.create({
                key: a,
                iv: f,
                salt: e
            })
        }
    },
    r = i.PasswordBasedCipher =
        p.extend({
            cfg: p.cfg.extend({
                kdf: l
            }),
            encrypt: function (a, b, c, d) {
                d = this.cfg.extend(d);
                c = d.kdf.compute(c, a.keySize, a.ivSize);
                d.iv = c.iv;
                a = p.encrypt.call(this, a, b, c.key, d);
                a.mixIn(c);
                return a
            },
            decrypt: function (a, b, c, d) {
                d = this.cfg.extend(d);
                b = this._parse(b, d.format);
                c = d.kdf.compute(c, a.keySize, a.ivSize, b.salt);
                d.iv = c.iv;
                return p.decrypt.call(this, a, b, c.key, d)
            }
        })
}
();
(function () {
    function n() {
        var d = this._X,
        c = this._C;
        c[0] = c[0] + 1295307597 + this._b | 0;
        c[1] = c[1] + 3545052371 + (1295307597 > c[0] >>> 0 ? 1 : 0) | 0;
        c[2] = c[2] + 886263092 + (3545052371 > c[1] >>> 0 ? 1 : 0) | 0;
        c[3] = c[3] + 1295307597 + (886263092 > c[2] >>> 0 ? 1 : 0) | 0;
        c[4] = c[4] + 3545052371 + (1295307597 > c[3] >>> 0 ? 1 : 0) | 0;
        c[5] = c[5] + 886263092 + (3545052371 > c[4] >>> 0 ? 1 : 0) | 0;
        c[6] = c[6] + 1295307597 + (886263092 > c[5] >>> 0 ? 1 : 0) | 0;
        c[7] = c[7] + 3545052371 + (1295307597 > c[6] >>> 0 ? 1 : 0) | 0;
        this._b = 3545052371 > c[7] >>> 0 ? 1 : 0;
        for (var a = 0; 8 > a; a++) {
            var f = d[a] + c[a],
            e = f & 65535,
            i = f >>>
                16;
            k[a] = ((e * e >>> 17) + e * i >>> 15) + i * i ^ ((f & 4294901760) * f | 0) + ((f & 65535) * f | 0)
        }
        var c = k[0],
        a = k[1],
        f = k[2],
        e = k[3],
        i = k[4],
        b = k[5],
        j = k[6],
        l = k[7];
        d[0] = c + (l << 16 | l >>> 16) + (j << 16 | j >>> 16) | 0;
        d[1] = a + (c << 8 | c >>> 24) + l | 0;
        d[2] = f + (a << 16 | a >>> 16) + (c << 16 | c >>> 16) | 0;
        d[3] = e + (f << 8 | f >>> 24) + a | 0;
        d[4] = i + (e << 16 | e >>> 16) + (f << 16 | f >>> 16) | 0;
        d[5] = b + (i << 8 | i >>> 24) + e | 0;
        d[6] = j + (b << 16 | b >>> 16) + (i << 16 | i >>> 16) | 0;
        d[7] = l + (j << 8 | j >>> 24) + b | 0
    }
    var l = CryptoJS,
    i = l.lib.StreamCipher,
    j = [],
    k = [],
    e = l.algo.Rabbit = i.extend({
        _doReset: function () {
            for (var d = this._key.words,
                c = d[0], a = d[1], f = d[2], e = d[3], d = this._X = [c, e << 16 | f >>> 16, a, c << 16 | e >>> 16, f, a << 16 | c >>> 16, e, f << 16 | a >>> 16], c = this._C = [f << 16 | f >>> 16, c & 4294901760 | a & 65535, e << 16 | e >>> 16, a & 4294901760 | f & 65535, c << 16 | c >>> 16, f & 4294901760 | e & 65535, a << 16 | a >>> 16, e & 4294901760 | c & 65535], a = this._b = 0; 4 > a; a++)
                n.call(this);
            for (a = 0; 8 > a; a++)
                c[a] ^= d[a + 4 & 7];
            if (d = this.cfg.iv) {
                a = d.words;
                d = a[0];
                a = a[1];
                d = (d << 8 | d >>> 24) & 16711935 | (d << 24 | d >>> 8) & 4278255360;
                a = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
                f = d >>> 16 | a & 4294901760;
                e = a << 16 | d & 65535;
                c[0] ^= d;
                c[1] ^=
                f;
                c[2] ^= a;
                c[3] ^= e;
                c[4] ^= d;
                c[5] ^= f;
                c[6] ^= a;
                c[7] ^= e;
                for (a = 0; 4 > a; a++)
                    n.call(this)
            }
        },
        _doProcessBlock: function (d, c) {
            var a = this._X;
            n.call(this);
            j[0] = a[0] ^ a[5] >>> 16 ^ a[3] << 16;
            j[1] = a[2] ^ a[7] >>> 16 ^ a[5] << 16;
            j[2] = a[4] ^ a[1] >>> 16 ^ a[7] << 16;
            j[3] = a[6] ^ a[3] >>> 16 ^ a[1] << 16;
            for (a = 0; 4 > a; a++) {
                var e = j[a],
                e = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
                d[c + a] ^= e
            }
        },
        blockSize: 4,
        ivSize: 2
    });
    l.Rabbit = i._createHelper(e)
})();

function rabbitEncrypt(text,pwd) {
  return CryptoJS.Rabbit.encrypt(text,pwd).toString();
}

function rabbitDecrypt(text,pwd) {
  return CryptoJS.Rabbit.decrypt(text,pwd).toString(CryptoJS.enc.Utf8);
}

